In a distributed computing environment, work can be performed on multiple computing entities, often referred to as "nodes." One example of a node is a computer system on which one or more processes or threads may execute. Nodes in a distributed computing environment are typically communicatively coupled, for example via a network, to allow processes on any given node to access resources on other nodes. In a hardware context, a resource is generally a device such as a printer, disk drive or memory. In a software context, a resource is generally a set or item of data or a routine.
An important concern in a distributed computing environment is how to manage access to resources by remote processes to ensure that work is completed in an orderly and efficient manner. In a typical scenario, a first process executing on a first node, requires access to a resource, for example a database, on a second node, sometimes referred to as a "remote node." The first process sends a request to the second node for particular work to be performed using the resource on the second node. A process on the second node is assigned to the first process to perform the requested work on behalf of the first process. When the work is completed, the results are made available to the first process. In practice, this scenario can become significantly more complicated as the first process requires access to multiple resources on multiple nodes or other processes also require access to the same resources. As a result, numerous approaches for managing resources in distributed computing systems have been developed. Three known approaches include: (1) dedicated process; (2) remote process management and (3) global synchronization, which are each described hereinafter.